<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <!-- 作者为了严格模式更加灵活，给严格模式设置了作用域范围
  1、加在函数内，函数里面的东西是严格模式
  2、在script标签内。
  3、加在js文件内

  目的就是，如果你是写插件的，你用的严格模式，别人引入你的插件，你的严格模式不会对别人造成影响。
可以看jq的源码，就有严格模式的语句。

  规则：
    1、声明变量必须加var,let,const
    2、不能在if或者for里面定义函数
    3、this指向 单独的函数(非箭头函数时)调用不指向window,指向的是undefined
    本质的原因是，全局的东西不属于window了
    4、不能用delete 删除变量
       -->
  <script>
    'use strict'

    // a = 100;// a is not defined
    let a = 100;

    if (true) {

      function fn1() {
        console.log('fn1');
      }

    }
    // fn1() // fn1 is not defined

    // const fn2 = () => {
    //   console.log(this); // window
    // }
    // fn2()

    function fn3() {
      console.log(this);
    }

    fn3() // undefined

    console.log(window.a); //undefined
    console.log(a); //100

    // delete a;// Delete of an unqualified identifier in strict mode


    // function fn4() {
    //   console.log('fn4');
    //   // 不要再一个函数内部声明一个函数。不要违背函数重复利用的原则。
    //   function fn5() {
    //     console.log('fn5');
    //   }
    //   fn5()
    // }

    // fn4()
    // fn5()

  </script>
</body>

</html>